﻿using System.Windows.Forms;

namespace Edigio
{
	public partial class formulario_de_busqueda_y_reemplazo : Form
	{
		public formulario_de_busqueda_y_reemplazo()
		{
			InitializeComponent();
			//busqueda = new Buscador_del_editor_de_textos();
		}

		/*
		 * Propiedades
		 */

	//        Color color_de_fondo_de_la_palabra_coincidente = Color.LightGray;
	//        bool ignora_diferencias_entre_mayusculas_y_minusculas = false;
	//        bool busca_por_coincidencia_exacta = false;

	//        Buscador_del_editor_de_textos busqueda;
	//        TextEditorControl _editor;

	//        TextEditorControl Editor
	//        {
	//                get { return _editor; }
	//                set
	//                {
	//                        _editor = value;
	//                        busqueda.Document = _editor.Document;
	//                        UpdateTitleBar();
	//                }
	//        }

	//        public bool _lastSearchWasBackward = false;
	//        public bool _lastSearchLoopedAround;
		
	//        /*
	//         * Métodos
	//         */
	//        public Rango_de_texto buscar_el_siguiente(bool viaF3, string mensaje_si_no_se_encontro)
	//        {
	//                if (string.IsNullOrEmpty(txtLookFor.Text))
	//                {
	//                        return null;
	//                }
		
	//                busqueda.LookFor = txtLookFor.Text;
	//                busqueda.MatchCase = chkMatchCase.Checked;
	//                busqueda.MatchWholeWordOnly = chkMatchWholeWord.Checked;

	//                var caret = _editor.ActiveTextAreaControl.Caret;
	//                if (viaF3 && busqueda.HasScanRegion && !caret.Offset.
	//                        IsInRange(busqueda.BeginOffset, busqueda.EndOffset))
	//                {
	//                        // user moved outside of the originally selected region
	//                        busqueda.limpiar_la_region();
	//                        UpdateTitleBar();
	//                }

	//                int startFrom = caret.Offset - (searchBackward ? 1 : 0);
	//                Rango_de_texto rango = busqueda.buscar_el_siguiente(startFrom, searchBackward, out _lastSearchLoopedAround);
	//                if (rango != null)
	//                        SelectResult(rango);
	//                else if (mensaje_si_no_se_encontro != null)
	//                        MessageBox.Show(mensaje_si_no_se_encontro);
	//                return rango;
	//        }

	//        public Rango_de_texto buscar_el_siguiente_br(bool viaF3, bool searchBackward, string mensaje_si_no_se_encontro)
	//        {
	//                if (string.IsNullOrEmpty(txtLookFor.Text))
	//                {
	//                        return null;
	//                }
	//                _lastSearchWasBackward = searchBackward;
	//                busqueda.LookFor = txtLookFor.Text;
	//                busqueda.MatchCase = chkMatchCase.Checked;
	//                busqueda.MatchWholeWordOnly = chkMatchWholeWord.Checked;

	//                var caret = _editor.ActiveTextAreaControl.Caret;
	//                if (viaF3 && busqueda.HasScanRegion && !caret.Offset.
	//                        IsInRange(busqueda.BeginOffset, busqueda.EndOffset))
	//                {
	//                        // user moved outside of the originally selected region
	//                        busqueda.limpiar_la_region();
	//                        UpdateTitleBar();
	//                }

	//                int startFrom = caret.Offset - (searchBackward ? 1 : 0);
	//                Rango_de_texto rango = busqueda.buscar_el_siguiente(startFrom, searchBackward, out _lastSearchLoopedAround);
	//                if (rango != null)
	//                        SelectResult(rango);
	//                else if (mensaje_si_no_se_encontro != null)
	//                        MessageBox.Show(mensaje_si_no_se_encontro);
	//                return rango;
	//        }

	//        public void ShowFor(TextEditorControl editor)
	//        {
	//                Editor = editor;

	//                busqueda.limpiar_la_region();
	//                var manipulador_de_seleccion = editor.ActiveTextAreaControl.SelectionManager;
	//                if (manipulador_de_seleccion.HasSomethingSelected && manipulador_de_seleccion.SelectionCollection.Count == 1)
	//                {
	//                        var sel = manipulador_de_seleccion.SelectionCollection[0];
	//                        if (sel.StartPosition.Line == sel.EndPosition.Line)
	//                                txtLookFor.Text = manipulador_de_seleccion.SelectedText;
	//                        else
	//                                busqueda.SetScanRegion(sel);
	//                }
	//                else
	//                {
	//                        // Get the current word that the caret is on
	//                        Caret caret = editor.ActiveTextAreaControl.Caret;
	//                        int start = TextUtilities.FindWordStart(editor.Document, caret.Offset);
	//                        int endAt = TextUtilities.FindWordEnd(editor.Document, caret.Offset);
	//                        txtLookFor.Text = editor.Document.GetText(start, endAt - start);
	//                }

	//                this.Owner = (Form)editor.TopLevelControl;
	//                this.Show();

	//                txtLookFor.SelectAll();
	//                txtLookFor.Focus();
	//        }

	//        private void SelectResult(Rango_de_texto range)
	//        {
	//                TextLocation p1 = _editor.Document.OffsetToPosition(range.Offset);
	//                TextLocation p2 = _editor.Document.OffsetToPosition(range.Offset + range.Length);
	//                _editor.ActiveTextAreaControl.SelectionManager.SetSelection(p1, p2);
	//                _editor.ActiveTextAreaControl.ScrollTo(p1.Line, p1.Column);
	//                // Also move the caret to the end of the selection, because when the user 
	//                // presses F3, the caret is where we start searching next time.
	//                _editor.ActiveTextAreaControl.Caret.Position =
	//                        _editor.Document.OffsetToPosition(range.Offset + range.Length);
	//        }

	//        Dictionary<TextEditorControl, Grupo_resaltado> _highlightGroups = new Dictionary<TextEditorControl, Grupo_resaltado>();

	//        private void btnHighlightAll_Click(object sender, EventArgs e)
	//        {
	//                if (!_highlightGroups.ContainsKey(_editor))
	//                        _highlightGroups[_editor] = new Grupo_resaltado(_editor);
	//                Grupo_resaltado group = _highlightGroups[_editor];

	//                if (string.IsNullOrEmpty(LookFor))
	//                        // Clear highlights
	//                        group.ClearMarkers();
	//                else
	//                {
	//                        busqueda.LookFor = txtLookFor.Text;
	//                        busqueda.MatchCase = chkMatchCase.Checked;
	//                        busqueda.MatchWholeWordOnly = chkMatchWholeWord.Checked;

	//                        bool looped = false;
	//                        int offset = 0, count = 0;
	//                        for (; ; )
	//                        {
	//                                Rango_de_texto range = busqueda.buscar_el_siguiente(offset, false, out looped);
	//                                if (range == null || looped)
	//                                        break;
	//                                offset = range.Offset + range.Length;
	//                                count++;

	//                                var m = new TextMarker(range.Offset, range.Length,
	//                                                TextMarkerType.SolidBlock, Color.Yellow, Color.Black);
	//                                group.AddMarker(m);
	//                        }
	//                        if (count == 0)
	//                                MessageBox.Show("Search text not found.");
	//                        else
	//                                Close();
	//                }
	//        }

	//        //private void FindAndReplaceForm_FormClosing(object sender, FormClosingEventArgs e)
	//        //{	// Prevent dispose, as this form can be re-used
	//        //        if (e.CloseReason != CloseReason.FormOwnerClosing)
	//        //        {
	//        //                if (this.Owner != null)
	//        //                        this.Owner.Select(); // prevent another app from being activated instead

	//        //                e.Cancel = true;
	//        //                Hide();

	//        //                // Discard search region
	//        //                busqueda.limpiar_la_region();
	//        //                _editor.Refresh(); // must repaint manually
	//        //        }
	//        //}

	//        private void InsertText(string text)
	//        {
	//                var textArea = _editor.ActiveTextAreaControl.TextArea;
	//                textArea.Document.UndoStack.StartUndoGroup();
	//                try
	//                {
	//                        if (textArea.SelectionManager.HasSomethingSelected)
	//                        {
	//                                textArea.Caret.Position = textArea.SelectionManager.SelectionCollection[0].StartPosition;
	//                                textArea.SelectionManager.RemoveSelectedText();
	//                        }
	//                        textArea.InsertString(text);
	//                }
	//                finally
	//                {
	//                        textArea.Document.UndoStack.EndUndoGroup();
	//                }
	//        }

	//        /*
	//         * Métodos con eventos
	//         */

	//        private void caja_verificadora_sin_distincion_entre_mayusculas_y_minusculas_CheckedChanged(object sender, EventArgs e)
	//        {
	//                ignora_diferencias_entre_mayusculas_y_minusculas = caja_verificadora_sin_distincion_entre_mayusculas_y_minusculas.Checked;
	//        }

	//        private void caja_verificadora_sin_distincion_entre_mayusculas_y_minusculas_br_CheckedChanged(object sender, EventArgs e)
	//        {
	//                ignora_diferencias_entre_mayusculas_y_minusculas = caja_verificadora_sin_distincion_entre_mayusculas_y_minusculas.Checked;
	//        }

	//        private void caja_verificadora_buscar_por_coincidencia_exacta_CheckedChanged(object sender, EventArgs e)
	//        {
	//                busca_por_coincidencia_exacta = caja_verificadora_sin_distincion_entre_mayusculas_y_minusculas.Checked;
	//        }

	//        private void caja_verificadora_buscar_por_coincidencia_exacta_br_CheckedChanged(object sender, EventArgs e)
	//        {
	//                busca_por_coincidencia_exacta = caja_verificadora_sin_distincion_entre_mayusculas_y_minusculas.Checked;
	//        }

	//        private void boton_reemplazar_todo_br_Click(object sender, EventArgs e)
	//        {
	//                int contador = 0;
	//                // BUG FIX: if the replacement string contains the original search string
	//                // (e.g. replace "red" with "very red") we must avoid looping around and
	//                // replacing forever! To fix, start replacing at beginning of region (by 
	//                // moving the caret) and stop as soon as we loop around.
	//                _editor.ActiveTextAreaControl.Caret.Position =
	//                        _editor.Document.OffsetToPosition(busqueda.BeginOffset);

	//                _editor.Document.UndoStack.StartUndoGroup();
	//                try
	//                {
	//                        while (buscar_el_siguiente(false, false, null) != null)
	//                        {
	//                                if (_lastSearchLoopedAround)
	//                                        break;

	//                                // Replace
	//                                contador++;
	//                                InsertText(txtReplaceWith.Text);
	//                        }
	//                }
	//                finally
	//                {
	//                        _editor.Document.UndoStack.EndUndoGroup();
	//                }
	//                if (contador == 0)
	//                        MessageBox.Show("No occurrances found.");
	//                else
	//                {
	//                        MessageBox.Show(string.Format("Replaced {0} occurrances.", contador));
	//                        Close();
	//                }
	//        }

	//        private void boton_reemplazar_br_Click(object sender, EventArgs e)
	//        {
	//                var manipulador_de_seleccion = _editor.ActiveTextAreaControl.SelectionManager;
	//                if (string.Equals(manipulador_de_seleccion.SelectedText, txtLookFor.Text, StringComparison.OrdinalIgnoreCase))
	//                        InsertText(txtReplaceWith.Text);
	//                buscar_el_siguiente(false, _lastSearchWasBackward, "Búsqueda sin éxito");
	//        }

	//        private void boton_buscar_br_Click(object sender, EventArgs e)
	//        {
	//                buscar_el_siguiente(false, false, "Búsqueda sin éxito");
	//        }

	//        private void boton_buscar_b_Click(object sender, EventArgs e)
	//        {
	//                buscar_el_siguiente(false, false, "Búsqueda sin éxito");
	//        }

		

				
	//
	}
}
